package com.inspur.sc.springboot.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.inspur.sc.springboot.entity.SysMenu;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class MenuUtil {

    public static JSONArray getMenuJson(List list,boolean isUrl){
        JSONArray root=new JSONArray();
        if(null!=list && list.size()>0){
            List<SysMenu> menus =getRoot(list);
            for(SysMenu menu:menus) {
                getObjectJson(menu, root, list,isUrl);
            }
        }
        return root;
    }

    /**
     * 获取最顶级菜单
     * @param list
     * @return
     */
    private static  List<SysMenu> getRoot(List<SysMenu> list){
        List<SysMenu> menus=new ArrayList<>();
        Iterator<SysMenu> iterator=  list.iterator();
        while(iterator.hasNext()){
            SysMenu menu = iterator.next();
            if(menu.getPid() ==0){
                menus.add(menu);
                iterator.remove();
            }
        }
        return menus;
    }

    private static JSONArray getObjectJson(SysMenu menu,JSONArray jsonArray,List<SysMenu> list,boolean isUrl){
        JSONObject jsonObject=new JSONObject();
        jsonObject.put("id",menu.getId());
        jsonObject.put("name",menu.getName());
        jsonObject.put("pid",menu.getPid());
        jsonObject.put("cls",menu.getCls());
        jsonObject.put("target",menu.getTarget());
        if(isUrl){
            jsonObject.put("url",menu.getUrl());
        }
        for(SysMenu sysMenu: list){//如果下面有子节点，展开
            if(sysMenu.getId()==menu.getPid()){
                jsonObject.put("open","true");
                break;
            }
        }
        List<SysMenu> ls=getSub(menu,list);
        if(ls.size()>0){
            JSONArray child=new JSONArray();
            for(int i=0;i<ls.size();i++){
                SysMenu m=ls.get(i);
                getObjectJson(m,child,list,isUrl);
                jsonObject.put("children",child);
            }
            jsonObject.put("open",true);
        }
        jsonArray.add(jsonObject);
        return jsonArray;
    }

    /* 取得该资源的子节点资源 */
    private static List getSub(SysMenu menu,List<SysMenu> list) {
        List ls = new ArrayList();
        for (int i = 0; i < list.size(); i++) {
            SysMenu sysMenu = list.get(i);
            if(sysMenu.getPid()==menu.getId()){
                list.remove(sysMenu);// 减少list的容量
                i--;
                ls.add(sysMenu);
            }
        }
        return ls;
    }
}
